#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include "Stack.hpp"
#include "Calculator.hpp"

using namespace std;

stack<int> s;

// 递归写法
int add(int n)
{
    if (n == 0)
    {
        return 0;
    }
    else{
        return (2*add(n>>1)+n);
    }
}

// vector写法（与链栈类似）
int add2(int n)
{
    vector<int> a;
    a.push_back(0);
    int ret = 0;
    for (int i = 1;i<=n;i++)
    {
        ret = 2*a[i>>1]+i;
        a.push_back(ret);
    }
    return ret;
}

int main(int argc, char const *argv[])
{
    Stack<int> s;
    s.Emplace(12);
    s.Emplace(13);
    cout << s.Pop() << endl;
    s.Clear();
    s.Emplace(77);
    cout << s.Top() << endl;;

    Calculator cal;
    string str = "2*(2+3)+6.1";
    cout << cal.Calcualte(str) << endl;

    cout << add(2) << endl;
    cout << add2(2) << endl;

    return 0;
}


